/*
 * led.h
 *
 *  Created on: Apr 12, 2012
 *      Author: Rafal Sokolowski
 *      Comment: Obsluga przyciskow lacznie z funkcjami obslugujacymi przerwania.
 */

#include "usart.h"

#include "frame.h"
#include "ledy.h"
#include "board.h"
#include "gpio.h"




void initLed ()
{
	usart_write_line(&AVR32_USART0, "INIT_LED:\t Begin");
	gpio_set_gpio_pin(LED6_GPIO); // LED CZERWONY DLA MASTER

	gpio_set_gpio_pin(LED0_GPIO);
	gpio_set_gpio_pin(LED1_GPIO);
	gpio_set_gpio_pin(LED2_GPIO);
	gpio_set_gpio_pin(LED3_GPIO);
	gpio_set_gpio_pin(LED5_GPIO);
	gpio_set_gpio_pin(LED7_GPIO);

	g_oLedSetting.u8_Dir = 0;
	g_oLedSetting.u8_Start = 0;
	g_oLedSetting.u16_Index = 0;
	g_oLedSetting.u32_Values_a[0] = LED0_GPIO;
	g_oLedSetting.u32_Values_a[1] = LED1_GPIO;
	g_oLedSetting.u32_Values_a[2] = LED2_GPIO;
	g_oLedSetting.u32_Values_a[3] = LED3_GPIO;
	g_oLedSetting.u32_Values_a[4] = LED5_GPIO;
	g_oLedSetting.u32_Values_a[5] = LED7_GPIO;

	usart_write_line(&AVR32_USART0, "INIT_LED:\t End\n");
}

void chaseLed () // w tej funkcji odbywa sie swiecenie ledow SLAVE
{
	usart_write_line(&AVR32_USART0, "CHASE_LED:\t \n");
	if(g_oLedSetting.u8_Start){
		if(g_oFlags.u8_LedPeriodPassed)
		{
			// switch off led
			gpio_set_gpio_pin(g_oLedSetting.u32_Values_a[g_oLedSetting.u16_Index]);
			//move
			if (!g_oLedSetting.u8_Dir) // zero oznacza w prawo (czyli fail w warunku)
			{
				if (g_oLedSetting.u16_Index < LEDS_LIMIT)
					g_oLedSetting.u16_Index++;
				else
					g_oLedSetting.u16_Index = 0;
			}
			else
			{
				if (g_oLedSetting.u16_Index > 0)
					g_oLedSetting.u16_Index--;
				else
					g_oLedSetting.u16_Index = LEDS_LIMIT;
			}
			//light on led
			gpio_clr_gpio_pin(g_oLedSetting.u32_Values_a[g_oLedSetting.u16_Index]);
			g_oFlags.u8_LedPeriodPassed = 0;
		}
	}
}

void masterLed() // w tej funkcji odbywa sie zapalanie ledow MASTER (przy konfiguracji 0--3 i red)
{
	usart_write_line(&AVR32_USART0, "CHASE_LED:\t \n");
	unsigned char u8_tmp_m;
	u8_tmp_m = g_oFlags.u8_ActiveSlaves;
	if (u8_tmp_m)
	{
		if (0x01 & u8_tmp_m)
			gpio_clr_gpio_pin(LED0_GPIO);
		if (0x02 & u8_tmp_m)
			gpio_clr_gpio_pin(LED1_GPIO);
		if (0x04 & u8_tmp_m)
			gpio_clr_gpio_pin(LED2_GPIO);
	}
	else
	{
		gpio_set_gpio_pin(LED0_GPIO);
		gpio_set_gpio_pin(LED1_GPIO);
		gpio_set_gpio_pin(LED2_GPIO);
	}
}

int timerLed()
{
	g_oFlags.u8_LedPeriodPassed = 1;
	return 0;
}
